package jnpf.database.sql.append.create;

import jnpf.database.constant.ViewDataTypeConst;
import jnpf.database.enums.datatype.DtMysqlEnum;
import jnpf.database.model.DataTypeModel;
import jnpf.database.model.DbTableFieldModel;
import jnpf.database.source.DbBase;
import jnpf.database.source.impl.DbMySQL;
import jnpf.database.source.impl.DbSQLServer;
import jnpf.database.sql.impl.SqlMySQL;
import jnpf.database.sql.impl.SqlSQLServer;
import jnpf.model.visiual.DataTypeConst;
import lombok.Data;

import java.util.List;

/**
 * 类功能
 *
 * @author JNPF开发平台组
 * @version V3.2.0
 * @copyright 引迈信息技术有限公司
 * @date 2021/10/20
 */
@Data
public class CreateSqlDTO {


    public CreateSqlDTO(DbBase dbBase, String newTable, String tableComment, List<DbTableFieldModel> fields){
        this.dbBase = dbBase;
        this.newTable = newTable;
        this.tableComment = tableComment;
        this.fields = fields;
    }

    /**
     * 数据库基类
     */
    private DbBase dbBase;

    /**
     * 新建表名
     */
    private String newTable;

    /**
     * 新建表注释
     */
    private String tableComment;

    /**
     * 新建表字段
     */
    private List<DbTableFieldModel> fields;

    /*============独有方法=============*/
    /*
     * 为了便于快速定位，个别数据库独有方式，抽取成独有变量来解耦
     */
    /**
     * MySQL、SQLServer独有注释方法
     */
    public String getMysqlSqlServerComments(){
        //执行一些个别数据独有的方式
        if(this.dbBase.getClass() == DbMySQL.class){
            return SqlMySQL.getTabComment(this.tableComment);
        }
        if(this.dbBase.getClass() == DbSQLServer.class){
            return SqlSQLServer.getTableComment(this.tableComment, this.newTable, this.fields);
        }
        return null;
    }

    /**
     * MySQL 字段注解方式
     * @param fieldComment 字段注解
     * @return mysql字段注解
     */
    public String getMysqlFieldComment(String fieldComment){
        if(this.dbBase.getClass() == DbMySQL.class){
            return SqlMySQL.getCreFieldComment(fieldComment);
        }
        return "";
    }

    /**
     * MySQL独有,varchar作为主键的特殊处理
     * @return
     */
    public DataTypeModel getMysqlDataTypeModel(DbTableFieldModel field, DataTypeModel dataTypeModel){
        if(this.dbBase.getClass() == DbMySQL.class){
            if(field.getPrimaryKey() == 1 && field.getDataType().equals(ViewDataTypeConst.VARCHAR)){
                return DtMysqlEnum.VARCHAR_KEY.getDataTypeModel();
            }
        }
        return dataTypeModel;
    }


}
